μλ°μ€ν¬λ¦½νΈ μμ§ μν€ν μ², κ°μ λ¨Έμ , μ€ν λ©μ»€λμ¦μ λν μ¬μΈ΅ νꡬ. μ½λκ° μ΄λ»κ² μ€νλλμ§ μ΄ν΄ν΄ 보μΈμ.
κ°μ λ¨Έμ : μλ°μ€ν¬λ¦½νΈ μμ§ λ΄λΆ ꡬ쑰 νν€μΉκΈ°
μΉμ ꡬλνλ 보νΈμ μΈ μΈμ΄μΈ μλ°μ€ν¬λ¦½νΈλ μ½λλ₯Ό ν¨μ¨μ μΌλ‘ μ€ννκΈ° μν΄ μ κ΅ν μμ§μ μμ‘΄ν©λλ€. μ΄ μμ§λ€μ μ€μ¬μλ κ°μ λ¨Έμ (VM)μ΄λΌλ κ°λ μ΄ μμ΅λλ€. μ΄ VMμ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄νλ©΄ μλ°μ€ν¬λ¦½νΈμ μ±λ₯ νΉμ±μ λν κ·μ€ν ν΅μ°°λ ₯μ μ»κ³ κ°λ°μκ° λ μ΅μ νλ μ½λλ₯Ό μμ±ν μ μκ² λ©λλ€. μ΄ κ°μ΄λλ μλ°μ€ν¬λ¦½νΈ VMμ μν€ν μ²μ μλ λ°©μμ λν΄ μ¬μΈ΅μ μΌλ‘ λ€λ£Ήλλ€.
κ°μ λ¨Έμ μ΄λ 무μμΈκ°?
λ³Έμ§μ μΌλ‘ κ°μ λ¨Έμ μ μννΈμ¨μ΄λ‘ ꡬνλ μΆμμ μΈ μ»΄ν¨ν° μν€ν μ²μ λλ€. μ΄λ μλ°μ€ν¬λ¦½νΈμ κ°μ νΉμ μΈμ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ΄ κΈ°λ³Έ νλμ¨μ΄μ λ 립μ μΌλ‘ μ€νλ μ μλ νκ²½μ μ 곡ν©λλ€. μ΄λ¬ν 격리λ μ΄μμ±, 보μ λ° ν¨μ¨μ μΈ λ¦¬μμ€ κ΄λ¦¬λ₯Ό κ°λ₯νκ² ν©λλ€.
μ΄λ κ² μκ°ν΄ λ³Ό μ μμ΅λλ€. VMμ μ¬μ©νμ¬ macOS λ΄μμ Windows μ΄μ 체μ λ₯Ό μ€νν μ μλ κ²μ²λΌ, μλ°μ€ν¬λ¦½νΈ μμ§μ VMμ ν΄λΉ μμ§μ΄ μ€μΉλ λͺ¨λ νλ«νΌ(λΈλΌμ°μ , Node.js λ±)μμ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ€νν μ μκ² ν΄μ€λλ€.
μλ°μ€ν¬λ¦½νΈ μ€ν νμ΄νλΌμΈ: μμ€ μ½λμμ μ€νκΉμ§
μλ°μ€ν¬λ¦½νΈ μ½λκ° μ΄κΈ° μνμμ VM λ΄μμ μ€νλκΈ°κΉμ§μ μ¬μ μ μ¬λ¬ μ€μν λ¨κ³λ₯Ό ν¬ν¨ν©λλ€:
- νμ±(Parsing): μμ§μ λ¨Όμ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό νμ±νμ¬ μΆμ ꡬ문 νΈλ¦¬(AST)λ‘ μλ €μ§ κ΅¬μ‘°νλ ννμΌλ‘ λΆν΄ν©λλ€. μ΄ νΈλ¦¬λ μ½λμ ꡬ문 ꡬ쑰λ₯Ό λ°μν©λλ€.
- μ»΄νμΌ/μΈν°ν리ν μ΄μ : κ·Έ λ€μ ASTκ° μ²λ¦¬λ©λλ€. μ΅μ μλ°μ€ν¬λ¦½νΈ μμ§μ μΈν°ν리ν μ΄μ κ³Ό μ»΄νμΌ κΈ°λ²μ λͺ¨λ μ¬μ©νλ νμ΄λΈλ¦¬λ μ κ·Ό λ°©μμ μ¬μ©ν©λλ€.
- μ€ν: μ»΄νμΌλκ±°λ μΈν°ν리νΈλ μ½λλ VM λ΄μμ μ€νλ©λλ€.
- μ΅μ ν: μ½λκ° μ€νλλ λμ μμ§μ μ§μμ μΌλ‘ μ±λ₯μ λͺ¨λν°λ§νκ³ μ€ν μλλ₯Ό κ°μ νκΈ° μν΄ μ΅μ νλ₯Ό μ μ©ν©λλ€.
μΈν°ν리ν μ΄μ vs. μ»΄νμΌλ μ΄μ
μμ¬μ μΌλ‘ μλ°μ€ν¬λ¦½νΈ μμ§μ μ£Όλ‘ μΈν°ν리ν μ΄μ μ μμ‘΄νμ΅λλ€. μΈν°ν리ν°λ μ½λλ₯Ό ν μ€μ© μ²λ¦¬νλ©° κ° λͺ λ Ήμ΄λ₯Ό μμ°¨μ μΌλ‘ λ²μνκ³ μ€νν©λλ€. μ΄ λ°©μμ λΉ λ₯Έ μμ μκ°μ μ 곡νμ§λ§ μ»΄νμΌλ μ΄μ μ λΉν΄ μ€ν μλκ° λ릴 μ μμ΅λλ€. λ°λ©΄μ μ»΄νμΌλ μ΄μ μ μ€ν μ μ μ 체 μμ€ μ½λλ₯Ό κΈ°κ³ μ½λ(λλ μ€κ° νν)λ‘ λ²μνλ κ³Όμ μ ν¬ν¨ν©λλ€. μ΄λ λ λΉ λ₯Έ μ€νμ κ°λ₯νκ² νμ§λ§ λ λμ μμ λΉμ©μ λ°μμν΅λλ€.
μ΅μ μμ§μ λ μ κ·Ό λ°©μμ μ₯μ μ κ²°ν©ν JIT(Just-In-Time) μ»΄νμΌ μ λ΅μ νμ©ν©λλ€. JIT μ»΄νμΌλ¬λ λ°νμ μ€μ μ½λλ₯Ό λΆμνκ³ μμ£Ό μ€νλλ λΆλΆ(ν«μ€ν)μ μ΅μ νλ κΈ°κ³ μ½λλ‘ μ»΄νμΌνμ¬ μ±λ₯μ ν¬κ² ν₯μμν΅λλ€. μμ² λ² μ€νλλ 루νλ₯Ό μκ°ν΄ 보μΈμ. JIT μ»΄νμΌλ¬λ ν΄λΉ 루νκ° λͺ λ² μ€νλ νμ μ΅μ νν μ μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈ κ°μ λ¨Έμ μ μ£Όμ κ΅¬μ± μμ
μλ°μ€ν¬λ¦½νΈ VMμ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ νμ κ΅¬μ± μμλ‘ μ΄λ£¨μ΄μ§λλ€:
- νμ(Parser): μλ°μ€ν¬λ¦½νΈ μμ€ μ½λλ₯Ό ASTλ‘ λ³ννλ μν μ ν©λλ€.
- μΈν°ν리ν°(Interpreter): ASTλ₯Ό μ§μ μ€ννκ±°λ λ°μ΄νΈμ½λλ‘ λ³νν©λλ€.
- μ»΄νμΌλ¬(JIT): μμ£Ό μ€νλλ μ½λλ₯Ό μ΅μ νλ κΈ°κ³ μ½λλ‘ μ»΄νμΌν©λλ€.
- μ΅μ νκΈ°(Optimizer): μ½λ μ±λ₯μ κ°μ νκΈ° μν΄ λ€μν μ΅μ νλ₯Ό μνν©λλ€(μ: ν¨μ μΈλΌμ΄λ, λ°λ μ½λ μ κ±°).
- κ°λΉμ§ 컬λ ν°(Garbage Collector): λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό νμνμ¬ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ κ΄λ¦¬ν©λλ€.
- λ°νμ μμ€ν (Runtime System): μ€ν νκ²½μ νμμ μΈ μλΉμ€(μ: λΈλΌμ°μ μ DOM μ κ·Ό, Node.jsμ νμΌ μμ€ν μ κ·Ό)λ₯Ό μ 곡ν©λλ€.
μ λͺ μλ°μ€ν¬λ¦½νΈ μμ§κ³Ό κ·Έ μν€ν μ²
μ¬λ¬ μ λͺ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ λΈλΌμ°μ λ° κΈ°ν λ°νμ νκ²½μ ꡬλν©λλ€. κ° μμ§μ κ³ μ ν μν€ν μ²μ μ΅μ ν κΈ°λ²μ κ°μ§κ³ μμ΅λλ€.
V8 (ν¬λ‘¬, Node.js)
ꡬκΈμ΄ κ°λ°ν V8μ κ°μ₯ λ리 μ¬μ©λλ μλ°μ€ν¬λ¦½νΈ μμ§ μ€ νλμ λλ€. μμ ν JIT μ»΄νμΌλ¬λ₯Ό μ¬μ©νμ¬ μ²μμλ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό κΈ°κ³ μ½λλ‘ μ»΄νμΌν©λλ€. V8μ λν μΈλΌμΈ μΊμ± λ° νλ ν΄λμ€μ κ°μ κΈ°μ μ ν΅ν©νμ¬ κ°μ²΄ μμ± μ κ·Όμ μ΅μ νν©λλ€. V8μ λ κ°μ μ»΄νμΌλ¬λ₯Ό μ¬μ©ν©λλ€: Full-codegen(λΉκ΅μ λ리μ§λ§ μμ μ μΈ μ½λλ₯Ό μμ±νλ μλ μ»΄νμΌλ¬)κ³Ό Crankshaft(κ³ λλ‘ μ΅μ νλ μ½λλ₯Ό μμ±νλ μ΅μ ν μ»΄νμΌλ¬)μ λλ€. λ μ΅κ·Όμλ V8μ΄ ν¨μ¬ λ μ§λ³΄λ μ΅μ ν μ»΄νμΌλ¬μΈ TurboFanμ λμ νμ΅λλ€.
V8μ μν€ν μ²λ μλμ λ©λͺ¨λ¦¬ ν¨μ¨μ±μ κ³ λλ‘ μ΅μ νλμ΄ μμ΅λλ€. λ©λͺ¨λ¦¬ λμλ₯Ό μ΅μννκ³ μ±λ₯μ ν₯μμν€κΈ° μν΄ κ³ κΈ κ°λΉμ§ 컬λ μ μκ³ λ¦¬μ¦μ μ¬μ©ν©λλ€. V8μ μ±λ₯μ λΈλΌμ°μ μ±λ₯κ³Ό Node.js μλ² μΈ‘ μ ν리μΌμ΄μ λͺ¨λμ μ€μν©λλ€. μλ₯Ό λ€μ΄, κ΅¬κΈ λ¬Έμμ κ°μ 볡μ‘ν μΉ μ ν리μΌμ΄μ μ λ°μμ± μλ μ¬μ©μ κ²½νμ μ 곡νκΈ° μν΄ V8μ μλμ ν¬κ² μμ‘΄ν©λλ€. Node.jsμ λ§₯λ½μμ, V8μ ν¨μ¨μ±μ νμ₯ κ°λ₯ν μΉ μλ²μμ μμ² κ°μ λμ μμ²μ μ²λ¦¬ν μ μκ² ν©λλ€.
SpiderMonkey (νμ΄μ΄νμ€)
λͺ¨μ§λΌκ° κ°λ°ν SpiderMonkeyλ νμ΄μ΄νμ€λ₯Ό ꡬλνλ μμ§μ λλ€. μΈν°ν리ν°μ μ¬λ¬ JIT μ»΄νμΌλ¬λ₯Ό κ°μΆ νμ΄λΈλ¦¬λ μμ§μ λλ€. SpiderMonkeyλ μ€λ μμ¬λ₯Ό κ°μ§κ³ μμΌλ©° μλ μ κ±Έμ³ μλΉν λ°μ μ κ±°μ³€μ΅λλ€. μμ¬μ μΌλ‘ SpiderMonkeyλ μΈν°ν리ν°μ κ·Έ λ€μ IonMonkey(JIT μ»΄νμΌλ¬)λ₯Ό μ¬μ©νμ΅λλ€. νμ¬ SpiderMonkeyλ λ€μ€ κ³μΈ΅μ JIT μ»΄νμΌμ κ°μΆ λ νλμ μΈ μν€ν μ²λ₯Ό νμ©ν©λλ€.
SpiderMonkeyλ νμ€ μ€μμ 보μμ μ€μ μ λλ κ²μΌλ‘ μλ €μ Έ μμ΅λλ€. μ¬μ©μλ₯Ό μ μ± μ½λλ‘λΆν° 보νΈνκΈ° μν κ°λ ₯ν 보μ κΈ°λ₯μ ν¬ν¨νκ³ μμ΅λλ€. κ·Έ μν€ν μ²λ κΈ°μ‘΄ μΉ νμ€κ³Όμ νΈνμ±μ μ μ§νλ©΄μ νλμ μΈ μ±λ₯ μ΅μ νλ₯Ό ν΅ν©νλ κ²μ μ°μ μν©λλ€. λͺ¨μ§λΌλ νμ΄μ΄νμ€κ° κ²½μλ ₯ μλ λΈλΌμ°μ λ‘ λ¨μ μ μλλ‘ μ±λ₯κ³Ό 보μμ κ°ννκΈ° μν΄ SpiderMonkeyμ μ§μμ μΌλ‘ ν¬μν©λλ€. νμ΄μ΄νμ€λ₯Ό λ΄λΆμ μΌλ‘ μ¬μ©νλ μ λ½μ ν μνμ λ―Όκ°ν κΈμ΅ λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄ SpiderMonkeyμ 보μ κΈ°λ₯μ λμ΄ νκ°ν μ μμ΅λλ€.
JavaScriptCore (μ¬ν리)
NitroλΌκ³ λ μλ €μ§ JavaScriptCoreλ μ¬ν리 λ° κΈ°ν μ ν μ νμμ μ¬μ©λλ μμ§μ λλ€. μ΄ λν JIT μ»΄νμΌλ¬λ₯Ό κ°μΆ λ λ€λ₯Έ μμ§μ λλ€. JavaScriptCoreλ LLVM(Low Level Virtual Machine)μ λ°±μλλ‘ μ¬μ©νμ¬ κΈ°κ³ μ½λλ₯Ό μμ±νλ―λ‘ λ°μ΄λ μ΅μ νκ° κ°λ₯ν©λλ€. μμ¬μ μΌλ‘ JavaScriptCoreλ JIT μ»΄νμΌλ¬μ μ΄κΈ° λ²μ μΈ SquirrelFish Extremeμ μ¬μ©νμ΅λλ€.
JavaScriptCoreλ μ νμ μνκ³μ λ°μ νκ² μ°κ²°λμ΄ μμΌλ©° μ ν νλμ¨μ΄μ κ³ λλ‘ μ΅μ νλμ΄ μμ΅λλ€. μ΄λ μμ΄ν° λ° μμ΄ν¨λμ κ°μ λͺ¨λ°μΌ κΈ°κΈ°μ μ€μν μ λ ₯ ν¨μ¨μ±μ κ°μ‘°ν©λλ€. μ νμ μμ¬ κΈ°κΈ°μμ λΆλλ½κ³ λ°μμ± μλ μ¬μ©μ κ²½νμ μ 곡νκΈ° μν΄ JavaScriptCoreλ₯Ό μ§μμ μΌλ‘ κ°μ ν©λλ€. JavaScriptCoreμ μ΅μ νλ 볡μ‘ν κ·Έλν½ λ λλ§μ΄λ λμ©λ λ°μ΄ν° μ²λ¦¬μ κ°μ 리μμ€ μ§μ½μ μΈ μμ μ νΉν μ€μν©λλ€. μμ΄ν¨λμμ μννκ² μ€νλλ κ²μμ μκ°ν΄ 보μΈμ. μ΄λ λΆλΆμ μΌλ‘ JavaScriptCoreμ ν¨μ¨μ μΈ μ±λ₯ λλΆμ λλ€. iOSμ© μ¦κ° νμ€ μ ν리μΌμ΄μ μ κ°λ°νλ νμ¬λ JavaScriptCoreμ νλμ¨μ΄ μΈμ μ΅μ νλ‘λΆν° μ΄μ μ μ»μ μ μμ΅λλ€.
λ°μ΄νΈμ½λμ μ€κ° νν
λ§μ μλ°μ€ν¬λ¦½νΈ μμ§μ ASTλ₯Ό κΈ°κ³ μ½λλ‘ μ§μ λ³ννμ§ μμ΅λλ€. λμ λ°μ΄νΈμ½λλΌλ μ€κ° ννμ μμ±ν©λλ€. λ°μ΄νΈμ½λλ μλμ μλ°μ€ν¬λ¦½νΈ μμ€λ³΄λ€ μ΅μ ννκ³ μ€ννκΈ° μ¬μ΄ μ μμ€μ νλ«νΌ λ 립μ μΈ μ½λ ννμ λλ€. κ·Έλ° λ€μ μΈν°ν리ν°λ JIT μ»΄νμΌλ¬κ° λ°μ΄νΈμ½λλ₯Ό μ€νν©λλ€.
λ°μ΄νΈμ½λλ₯Ό μ¬μ©νλ©΄ λμΌν λ°μ΄νΈμ½λλ₯Ό μ¬μ»΄νμΌν νμ μμ΄ λ€λ₯Έ νλ«νΌμμ μ€νν μ μμΌλ―λ‘ μ΄μμ±μ΄ ν₯μλ©λλ€. λν JIT μ»΄νμΌλ¬κ° λ ꡬ쑰νλκ³ μ΅μ νλ μ½λ ννμΌλ‘ μμ ν μ μμΌλ―λ‘ JIT μ»΄νμΌ νλ‘μΈμ€λ₯Ό λ¨μνν©λλ€.
μ€ν 컨ν μ€νΈμ νΈμΆ μ€ν
μλ°μ€ν¬λ¦½νΈ μ½λλ λ³μ, ν¨μ, μ€μ½ν 체μΈμ ν¬ν¨νμ¬ μ½λκ° μ€νλλ λ° νμν λͺ¨λ μ 보λ₯Ό λ΄κ³ μλ μ€ν 컨ν μ€νΈ(execution context) λ΄μμ μ€νλ©λλ€. ν¨μκ° νΈμΆλλ©΄ μλ‘μ΄ μ€ν 컨ν μ€νΈκ° μμ±λμ΄ νΈμΆ μ€ν(call stack)μ νΈμλ©λλ€. νΈμΆ μ€νμ ν¨μ νΈμΆμ μμλ₯Ό μ μ§νκ³ ν¨μκ° μ€νμ λ§μ³€μ λ μ¬λ°λ₯Έ μμΉλ‘ λμκ°λλ‘ λ³΄μ₯ν©λλ€.
νΈμΆ μ€νμ μ΄ν΄νλ κ²μ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό λλ²κΉ νλ λ° λ§€μ° μ€μν©λλ€. μ€λ₯κ° λ°μνμ λ νΈμΆ μ€νμ μ€λ₯λ‘ μ΄μ΄μ§ ν¨μ νΈμΆμ μΆμ μ μ 곡νμ¬ κ°λ°μκ° λ¬Έμ μ μμΈμ μ νν μ°Ύμλ΄λ λ° λμμ μ€λλ€.
κ°λΉμ§ 컬λ μ
μλ°μ€ν¬λ¦½νΈλ κ°λΉμ§ 컬λ ν°(GC)λ₯Ό ν΅ν΄ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μ¬μ©ν©λλ€. GCλ λ μ΄μ μ κ·Όν μ μκ±°λ μ¬μ©λμ§ μλ κ°μ²΄κ° μ°¨μ§νλ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ νμν©λλ€. μ΄λ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νκ³ κ°λ°μμ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό λ¨μνν©λλ€. μ΅μ μλ°μ€ν¬λ¦½νΈ μμ§μ μ€λ¨μ μ΅μννκ³ μ±λ₯μ ν₯μμν€κΈ° μν΄ μ κ΅ν GC μκ³ λ¦¬μ¦μ μ¬μ©ν©λλ€. μμ§λ§λ€ λ§ν¬ μ€ μ€μ(mark-and-sweep)μ΄λ μΈλλ³ κ°λΉμ§ 컬λ μ (generational garbage collection)κ³Ό κ°μ λ€λ₯Έ GC μκ³ λ¦¬μ¦μ μ¬μ©ν©λλ€. μλ₯Ό λ€μ΄, μΈλλ³ GCλ κ°μ²΄λ₯Ό λμ΄λ³λ‘ λΆλ₯νμ¬ μ€λλ κ°μ²΄λ³΄λ€ μ μ κ°μ²΄λ₯Ό λ μμ£Ό μμ§νλλ°, μ΄λ λ ν¨μ¨μ μΈ κ²½ν₯μ΄ μμ΅λλ€.
κ°λΉμ§ 컬λ ν°κ° λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μλννμ§λ§, μλ°μ€ν¬λ¦½νΈ μ½λμμ λ©λͺ¨λ¦¬ μ¬μ©μ μ μνλ κ²μ μ¬μ ν μ€μν©λλ€. λ§μ μμ κ°μ²΄λ₯Ό μμ±νκ±°λ νμ μ΄μμΌλ‘ κ°μ²΄λ₯Ό μ€λ 보μ νλ©΄ GCμ λΆλ΄μ μ£Όκ³ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈ μ±λ₯μ μν μ΅μ ν κΈ°λ²
μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄νλ©΄ κ°λ°μκ° λ μ΅μ νλ μ½λλ₯Ό μμ±νλ λ° λμμ΄ λ μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μ£Όμ μ΅μ ν κΈ°λ²μ λλ€:
- μ μ λ³μ νΌνκΈ°: μ μ λ³μλ μμ± μ‘°νλ₯Ό λλ¦¬κ² ν μ μμ΅λλ€.
- μ§μ λ³μ μ¬μ©νκΈ°: μ§μ λ³μλ μ μ λ³μλ³΄λ€ λΉ λ₯΄κ² μ κ·Όν μ μμ΅λλ€.
- DOM μ‘°μ μ΅μν: DOM μμ μ λΉμ©μ΄ λ§μ΄ λλλ€. κ°λ₯ν λλ§λ€ μ λ°μ΄νΈλ₯Ό μΌκ΄ μ²λ¦¬νμΈμ.
- 루ν μ΅μ ν: ν¨μ¨μ μΈ λ£¨ν ꡬ쑰λ₯Ό μ¬μ©νκ³ λ£¨ν λ΄ κ³μ°μ μ΅μννμΈμ.
- λ©λͺ¨μ΄μ μ΄μ μ¬μ©νκΈ°: λΉμ©μ΄ λ§μ΄ λλ ν¨μ νΈμΆ κ²°κ³Όλ₯Ό μΊμνμ¬ μ€λ³΅ κ³μ°μ νΌνμΈμ.
- μ½λ νλ‘νμΌλ§νκΈ°: νλ‘νμΌλ§ λꡬλ₯Ό μ¬μ©νμ¬ μ±λ₯ λ³λͺ© νμμ μλ³νμΈμ.
μλ₯Ό λ€μ΄, μΉνμ΄μ§μ μ¬λ¬ μμλ₯Ό μ λ°μ΄νΈν΄μΌ νλ μλ리μ€λ₯Ό μκ°ν΄ 보μΈμ. κ° μμλ₯Ό κ°λ³μ μΌλ‘ μ λ°μ΄νΈνλ λμ , μ λ°μ΄νΈλ₯Ό λ¨μΌ DOM μμ μΌλ‘ μΌκ΄ μ²λ¦¬νμ¬ μ€λ²ν€λλ₯Ό μ΅μννμΈμ. λ§μ°¬κ°μ§λ‘, 루ν λ΄μμ 볡μ‘ν κ³μ°μ μνν λ, 루ν λ΄λ΄ μμλ‘ μ μ§λλ κ°μ 미리 κ³μ°νμ¬ μ€λ³΅ κ³μ°μ νΌνλλ‘ λ Έλ ₯νμΈμ.
μλ°μ€ν¬λ¦½νΈ μ±λ₯ λΆμ λꡬ
κ°λ°μκ° μλ°μ€ν¬λ¦½νΈ μ±λ₯μ λΆμνκ³ λ³λͺ© νμμ μλ³νλ λ° λμμ΄ λλ μ¬λ¬ λκ΅¬κ° μμ΅λλ€:
- λΈλΌμ°μ κ°λ°μ λꡬ: λλΆλΆμ λΈλΌμ°μ μλ μ½λμ λ€λ₯Έ λΆλΆμ μ€ν μκ°μ μΈ‘μ ν μ μλ νλ‘νμΌλ§ κΈ°λ₯μ μ 곡νλ λ΄μ₯ κ°λ°μ λκ΅¬κ° ν¬ν¨λμ΄ μμ΅λλ€.
- Lighthouse: ꡬκΈμ΄ λ§λ λꡬλ‘, μΉ νμ΄μ§μ μ±λ₯, μ κ·Όμ± λ° κΈ°ν λͺ¨λ² μ¬λ‘λ₯Ό κ°μ¬ν©λλ€.
- Node.js νλ‘νμΌλ¬: Node.jsλ μλ² μΈ‘ μλ°μ€ν¬λ¦½νΈ μ½λμ μ±λ₯μ λΆμνλ λ° μ¬μ©ν μ μλ λ΄μ₯ νλ‘νμΌλ¬λ₯Ό μ 곡ν©λλ€.
μλ°μ€ν¬λ¦½νΈ μμ§ κ°λ°μ λ―Έλ λν₯
μλ°μ€ν¬λ¦½νΈ μμ§ κ°λ°μ μ±λ₯, 보μ λ° νμ€ μ€μλ₯Ό κ°μ νκΈ° μν μ§μμ μΈ λ Έλ ₯μΌλ‘ κ³μ μ§νλκ³ μμ΅λλ€. λͺ κ°μ§ μ£Όμ λν₯μ λ€μκ³Ό κ°μ΅λλ€:
- μΉμ΄μ λΈλ¦¬(Wasm): μΉμμ μ½λλ₯Ό μ€ννκΈ° μν λ°μ΄λ리 λͺ λ Ήμ΄ νμμ λλ€. Wasmμ μ¬μ©νλ©΄ κ°λ°μκ° λ€λ₯Έ μΈμ΄(μ: C++, Rust)λ‘ μ½λλ₯Ό μμ±νκ³ μ΄λ₯Ό WasmμΌλ‘ μ»΄νμΌνμ¬ λΈλΌμ°μ μμ λ€μ΄ν°λΈμ κ°κΉμ΄ μ±λ₯μΌλ‘ μ€νν μ μμ΅λλ€.
- κ³μΈ΅μ μ»΄νμΌ: μ¬λ¬ κ³μΈ΅μ JIT μ»΄νμΌμ μ¬μ©νλ©°, κ° κ³μΈ΅μ μ μ§μ μΌλ‘ λ 곡격μ μΈ μ΅μ νλ₯Ό μ μ©ν©λλ€.
- κ°μ λ κ°λΉμ§ 컬λ μ : λ ν¨μ¨μ μ΄κ³ λ λ°©ν΄λλ κ°λΉμ§ 컬λ μ μκ³ λ¦¬μ¦μ κ°λ°ν©λλ€.
- νλμ¨μ΄ κ°μ: νλμ¨μ΄ κΈ°λ₯(μ: SIMD λͺ λ Ήμ΄)μ νμ©νμ¬ μλ°μ€ν¬λ¦½νΈ μ€νμ κ°μνν©λλ€.
νΉν μΉμ΄μ λΈλ¦¬λ μΉ κ°λ°μμ μ€μν λ³νλ₯Ό λνλ΄λ©°, κ°λ°μκ° κ³ μ±λ₯ μ ν리μΌμ΄μ μ μΉ νλ«νΌμΌλ‘ κ°μ Έμ¬ μ μκ² ν©λλ€. μΉμ΄μ λΈλ¦¬ λλΆμ λΈλΌμ°μ μμ μ§μ μ€νλλ 볡μ‘ν 3D κ²μμ΄λ CAD μννΈμ¨μ΄λ₯Ό μκ°ν΄ 보μΈμ.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ μμ§μ λ΄λΆ μλμ μ΄ν΄νλ κ²μ μ§μ§ν μλ°μ€ν¬λ¦½νΈ κ°λ°μμκ² λ§€μ° μ€μν©λλ€. κ°μ λ¨Έμ , JIT μ»΄νμΌ, κ°λΉμ§ 컬λ μ λ° μ΅μ ν κΈ°λ²μ κ°λ μ νμ ν¨μΌλ‘μ¨ κ°λ°μλ λ ν¨μ¨μ μ΄κ³ μ±λ₯μ΄ λ°μ΄λ μ½λλ₯Ό μμ±ν μ μμ΅λλ€. μλ°μ€ν¬λ¦½νΈκ° κ³μ λ°μ νκ³ μ μ λ 볡μ‘ν μ ν리μΌμ΄μ μ ꡬλν¨μ λ°λΌ, κ·Έ κΈ°λ³Έ μν€ν μ²μ λν κΉμ μ΄ν΄λ λμ± κ°μΉ μκ² λ κ²μ λλ€. μ μΈκ³ μ¬μ©μλ₯Ό μν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ , Node.jsλ‘ μλ² μΈ‘ μ ν리μΌμ΄μ μ κ°λ°νλ , λλ μλ°μ€ν¬λ¦½νΈλ‘ μΈν°λν°λΈν κ²½νμ λ§λ€λ , μλ°μ€ν¬λ¦½νΈ μμ§ λ΄λΆμ λν μ§μμ μμ¬ν μ¬μ§ μμ΄ μ¬λ¬λΆμ κΈ°μ μ ν₯μμν€κ³ λ λμ μννΈμ¨μ΄λ₯Ό λ§λλ λ° λμμ΄ λ κ²μ λλ€.
κ³μ νμνκ³ , μ€ννλ©°, μλ°μ€ν¬λ¦½νΈλ‘ κ°λ₯ν κ²μ κ²½κ³λ₯Ό λνκ°μΈμ!